#include <iostream>
using namespace std;
//非类型参数
template <class T = int,int kBase = 10>
T mutiply(T x, T y){
    return x*y*kBase;
}
void test(){
  int i1 =3,i2 = 4;
  //隐式实例化，kbase无法推导出，要显式才能正常运行
  cout << mutiply(i1,i2)<<endl;
  cout << mutiply<int,10>(i1,i2)<<endl;
}
void test2(){
    //T = int 默认值，最终没有返回一个int，说明没有使用这个默认值
    //类型参数：主动指定的数据类型>编译器推断出来的类型
    //非类型参数：主动赋值>默认值
    cout << mutiply(1.2,1.2);
    //所以结果是14.4;
}
template <class T1=double ,class T2=double,int Kbase =10>
T1 multiply2(T2 t1,T2 t2){
    return t1 * t2 *Kbase;
}
void test3(){
    //无法判断出T1的类型,
  cout << multiply2(1.2,1.2)<<endl;
  cout << multiply2<double>(1.2,1.2)<<endl;
}
int main()
{
    test3();
    return 0;
}

